package com.weipai.springboot.module.dao;

import com.weipai.springboot.model.Goods;
import com.weipai.springboot.model.GoodsPrice;
import com.weipai.springboot.model.Product;
import com.weipai.springboot.model.api.GoodsItem;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @Author: 曹朋飞
 * @Date: 2018/08/24 10:12
 */
public interface GoodsDao {

    //保存商品
    void save(Goods goods);

    //删除商品
    int deleteByGoodsById(String id);

    //更改商品的状态
    int changeGoodsStatus(String id, Integer status);

    //通过货品编号查出所有的商品
    List<Goods> selectGoodsBySpuNumber(String spuNumber);

    //商品的统一保存
    void save(List<Goods> goodsList);
    

    //查询普通的精品商品,若不传类别id则查全部
    List<Map<String, Object>> searchBoutiqueGoods(String shopId, String categoryId, Integer size);

    List<Map<String, Object>> searchPopularBountiqueGoods(String shopId, Integer size);

    //店铺内部人气商品
    public List<Map<String, Object>> searchPopularGoodsByShop(String shopId, Integer start, Integer size);

    List<Map<String, Object>> searchBigBrandBountiqueGoods(Integer size);

    List<Map<String, Object>> searchRelatedGoods(String goodsId, Integer size);

    List<Map<String, Object>> searchRecommendGoods(String categoryId, Integer size);

    List<Map<String, Object>> searchSpecialGoods(int page, int size);

    Integer countSpecialGoods();

    List<Map<String, Object>> searchNewGoods(Integer size);

    List<Map<String,Object>> searchGoodsByCategoryId(String categoryId, Integer start, int size);

    Integer countGoodsByCategoryId(String categoryId);

    Goods selectByPrimaryKey(String goodsId);

    //通过shopid  搜索 商品数量
    int countByShop(String shopId);

    //通过商品编号查询商品的基础信息
    List<Map<String,Object>> getGoodsInfoBySkuNumber(String spuNumber);

    //查询此店铺下面一共有多少货品
    Integer getGoodsAmountByShopId(String shopId);

    //查询产品图片、商品名称、商品规格
    Map<String,Object> getGoodsInfoByGoodsId(String goodsId);



    List<Map<String,Object>> getGoodsPropsById(String id);

    //修改商品
    int updateGoods(Goods goods);

    //分页查询单一货品的所有商品
    List<Map<String,Object>> selectAllGoodsByProductId(@Param("start") Integer start, 
                                                       @Param("size") Integer size, 
                                                       @Param("spuNumber") String spuNumber);

    //分页查询单一货品的所有商品
    Integer selectAllGoodsByProductIdAmount(String spuNumber);

    GoodsItem getGoodsItemById(String id);

    // 一键添加所有商品到索引库
    List<GoodsItem> getGoodsItemByAll();

    //通过product的id查询商品的id
    List<Map<String,Object>> getGoodsIdByProductId(String spuNumber);

    //检索商品
    List<Map<String,Object>> searchGoods(Integer start, Integer size, String search);

    //检索商品的数量
    Integer searchGoodsAmount(String search);

    //商品报表信息
    List<Map<String,Object>> goodsStatement(int start, Integer end);

    //商品数量
    int getGoodsAmount();

    //得到商品的skuNumber
    Map<String,Object> getSkuNumberByGoodsId(String goodsId);

    //修改商品的销售数量
    int updateGoodsSoldOutNumber(String sku, Integer goodsNumber);

    Map<String,Object> getMaxSkuNumberFlag(String spuNumber);

    Map<String,Object> getMaxSkuNumber();

    //秒杀商品和会场商品--前端商品详情
    Map<String,Object> getSpecialGoodsInfo(String id);

    //通过商品id查询出此商品评论赠送的积分
    Map<String,Object> getCommentIntegralByGoodsId(String goodsId);

    //app前端获取商品价格
    List<Map<String,Object>> getGoodsInfoAndPriceBySpuNumber(String spuNumber, String memberLevelId);

    //通过商品编码查询商品
    List<Map<String,Object>> getGoodsInfoAndPriceBySkuNumber(String skuNumber, String memberLevelId);
}
